home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cocktail / cg.lha / cg / src / Queue.mi < prev    next >
Text File  |  1992-11-24  |  2KB  |  68 lines

  1. (* Ich, Doktor Josef Grosch, Informatiker, 11.8.1989 *)
  2.  
  3. IMPLEMENTATION MODULE Queue;
  4.  
  5. FROM SYSTEM    IMPORT TSIZE;
  6. FROM DynArray    IMPORT MakeArray, ReleaseArray;
  7. FROM Sets    IMPORT tSet, MakeSet, ReleaseSet, Include, Exclude;
  8.  
  9. IMPORT Sets;
  10.  
  11. VAR
  12.    QueueSizeL    : LONGINT;
  13.    QueuePtr    : POINTER TO ARRAY [0 .. 10000] OF SHORTCARD;
  14.    QueueSize    ,
  15.    QueueCount    ,
  16.    QueueIn    ,
  17.    QueueOut    : SHORTCARD;
  18.    QueueSet    : tSet;
  19.  
  20. PROCEDURE MakeQueue (Size: SHORTCARD);
  21.    BEGIN
  22.       QueueSizeL    := Size;
  23.       MakeArray (QueuePtr, QueueSizeL, TSIZE (SHORTCARD));
  24.       QueueSize        := Size;
  25.       QueueCount    := 0;
  26.       QueueIn        := 0;
  27.       QueueOut        := 0;
  28.       MakeSet   (QueueSet, QueueSize);
  29.    END MakeQueue;
  30.  
  31. PROCEDURE ReleaseQueue;
  32.    BEGIN
  33.       ReleaseArray (QueuePtr, QueueSizeL, TSIZE (SHORTCARD));
  34.       ReleaseSet   (QueueSet);
  35.    END ReleaseQueue;
  36.  
  37. PROCEDURE IsEmpty (): BOOLEAN;
  38.    BEGIN
  39.       RETURN QueueCount = 0;
  40.    END IsEmpty;
  41.  
  42. PROCEDURE Enqueue (Elmt: SHORTCARD);
  43.    BEGIN
  44.       IF NOT Sets.IsElement (Elmt, QueueSet) THEN
  45.      QueuePtr^[QueueIn] := Elmt;
  46.      QueueIn := (QueueIn + 1) MOD QueueSize;
  47.      INC (QueueCount);
  48.      Include (QueueSet, Elmt);
  49.       END;
  50.    END Enqueue;
  51.  
  52. PROCEDURE Dequeue (): SHORTCARD;
  53.    VAR Result    : SHORTCARD;
  54.    BEGIN
  55.       Result := QueuePtr^ [QueueOut];
  56.       QueueOut := (QueueOut + 1) MOD QueueSize;
  57.       DEC (QueueCount);
  58.       Exclude (QueueSet, Result);
  59.       RETURN Result;
  60.    END Dequeue;
  61.  
  62. PROCEDURE IsElement (Elmt: SHORTCARD): BOOLEAN;
  63.    BEGIN
  64.       RETURN Sets.IsElement (Elmt, QueueSet);
  65.    END IsElement;
  66.  
  67. END Queue.
  68.